package controller

import (
	"Cgo/backend/dto"
	"Cgo/backend/models"
	"Cgo/backend/service"
	"Cgo/common"

	"github.com/gin-gonic/gin"
)

// 用户控制器
func UserController(r *gin.RouterGroup) {
	// 用户更新
	r.POST("/update", common.HandlerFunc(updateUser))
	// 删除用户
	r.POST("/delete", common.HandlerFunc(deleteUser))
	r.POST("/adminLogin", common.HandlerFunc(adminLogin))
	r.POST("/getUserList", common.HandlerFunc(getUserList))
}

// @Summary 更新用户数据
// @Description 更新用户数据
// @Tags 后台用户接口
// @Accept json
// @Produce json
// @Param user body models.Users true "用户数据"
// @Success 200 {object} common.RT[string]
// @Router /backend/cy/user/update [post]
func updateUser(ctx *gin.Context) common.Result {
	var user models.Users
	err := ctx.ShouldBindJSON(&user)
	if err != nil {
		return common.R.Fail("更新失败")
	}
	//调用service层方法进行后续操作
	err = service.Update(user)
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success("更新用户数据")
}

// @Summary 删除用户
// @Description 删除用户
// @Tags 后台用户接口
// @Accept json
// @Produce json
// @Param id query string true "用户id"
// @Success 200 {object} common.RT[string]
// @Router /backend/cy/user/delete [post]
func deleteUser(ctx *gin.Context) common.Result {
	userId := ctx.Query("id")
	if userId == "" {
		return common.R.Fail("删除失败:用户id不能为空")
	}
	err := service.Delete(userId)
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success("删除用户成功")
}

// 管理员登录接口
// @Summary 管理员登录接口
// @Description 管理员登录接口
// @Tags 后台用户接口
// @Accept json
// @Produce json
// @Param adminLogin body dto.LoginDto true "管理员登录"
// @Success 200 {object} common.RT[string]
// @Router /backend/cy/user/adminLogin [post]
func adminLogin(ctx *gin.Context) common.Result {
	var admin dto.LoginDto
	err := ctx.ShouldBindJSON(&admin)
	if err != nil {
		return common.R.Fail("登录失败")
	}
	//调用service层方法进行后续操作
	err = service.AdminLogin(admin)
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success("登录成功")
}

// @Summary 获取用户列表
// @Description 获取用户列表
// @Tags 后台用户接口
// @Accept json
// @Produce json
// @Param userList body models.Users true "用户列表"
// @Success 200 {object} common.RT[models.Users]
// @Router /backend/cy/user/getUserList [post]
func getUserList(ctx *gin.Context) common.Result {
	var user dto.UserListDto
	err := ctx.ShouldBindJSON(&user)
	if err != nil {
		return common.R.Fail("获取失败")
	}
	//调用service层方法进行后续操作

	users, err2 := service.GetUserList(user)
	if err2 != nil {
		return common.R.Fail(err2.Error())
	}
	return common.R.Success(users)
}
